Form-Based Authentication হল Spring Security-তে একটি অথেন্টিকেশন পদ্ধতি যেখানে ব্যবহারকারী তাদের পরিচয় (ইউজারনেম এবং পাসওয়ার্ড) একটি কাস্টম HTML ফর্মের মাধ্যমে প্রদান করে। এটি ডিফল্ট HTTP Basic Authentication-এর চেয়ে বেশি ব্যবহারকারী-বান্ধব এবং নিরাপত্তা এবং কাস্টমাইজেশনের সুযোগ প্রদান করে।
Form-Based Authentication-এর বৈশিষ্ট্য
- Custom Login Form: ব্যবহারকারী নিজের লগইন পৃষ্ঠা তৈরি করতে পারে।
- Session Management: অথেন্টিকেশন সফল হলে ব্যবহারকারী সেশনে ধরে রাখা হয়।
- Redirection: সঠিক অথেন্টিকেশনের পরে ব্যবহারকারীকে নির্দিষ্ট পৃষ্ঠায় পুনঃনির্দেশিত করা যায়।
- Remember Me: লগইন স্টেট ধরে রাখা যায়।
Spring Security-তে Form-Based Authentication প্রয়োগ
ধাপ ১: Maven ডিপেনডেন্সি যোগ করুন
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
ধাপ ২: Spring Security কনফিগারেশন তৈরি করুন
Spring Security-তে Form-Based Authentication সেটআপ করার জন্য SecurityFilterChain ব্যবহার করা হয়।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/login", "/resources/**").permitAll() // Public URLs
.anyRequest().authenticated() // Other URLs require authentication
)
.formLogin(form -> form
.loginPage("/login") // Custom login page URL
.defaultSuccessUrl("/home", true) // Redirect after successful login
.failureUrl("/login?error=true") // Redirect on login failure
.permitAll()
)
.logout(logout -> logout
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout=true")
.permitAll()
);
return http.build();
}
}
ধাপ ৩: ইন-মেমরি ইউজার ডেটা যোগ করুন
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
@Configuration
public class InMemoryUserConfig {
@Bean
public InMemoryUserDetailsManager userDetailsManager() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
UserDetails admin = User.withDefaultPasswordEncoder()
.username("admin")
.password("admin")
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(user, admin);
}
}
ধাপ ৪: Custom Login পৃষ্ঠা তৈরি করুন
src/main/resources/templates/login.html ফাইল তৈরি করুন।
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<form th:action="@{/login}" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username" />
<br />
<label for="password">Password:</label>
<input type="password" id="password" name="password" />
<br />
<button type="submit">Login</button>
</form>
<p th:if="${param.error}" style="color: red;">Invalid username or password.</p>
<p th:if="${param.logout}" style="color: green;">You have been logged out.</p>
</body>
</html>
ধাপ ৫: প্রাইভেট পৃষ্ঠা তৈরি করুন
src/main/resources/templates/home.html ফাইল তৈরি করুন।
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Home</title>
</head>
<body>
<h1>Welcome to Home Page</h1>
<p>You are successfully logged in!</p>
<a th:href="@{/logout}">Logout</a>
</body>
</html>
ধাপ ৬: Controller তৈরি করুন
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class AppController {
@GetMapping("/login")
public String loginPage() {
return "login";
}
@GetMapping("/home")
public String homePage() {
return "home";
}
}
Spring Security Form-Based Authentication এর বৈশিষ্ট্য
- Customizable: কাস্টম লগইন পেজ, সফল/ব্যর্থ লগইনের পরে পুনঃনির্দেশনা।
- Security: ডিফল্ট সিকিউরিটি ফিচার যেমন পাসওয়ার্ড এনকোডিং।
- Session Management: লগইন সেশনের সঠিক ব্যবস্থাপনা।
- Error Handling: লগইন ব্যর্থ হলে কাস্টম মেসেজ প্রদর্শন।
প্রজেক্ট রান করা এবং পরীক্ষা
অ্যাপ্লিকেশনটি চালু করুন:
mvn spring-boot:run- ব্রাউজারে
http://localhost:8080/loginURL-এ যান। - লগইন করার জন্য নিচের ক্রেডেনশিয়াল ব্যবহার করুন:
- Username:
user - Password:
password
- Username:
উপসংহার
Spring Security-তে Form-Based Authentication একটি ব্যবহারকারী-বান্ধব অথেন্টিকেশন পদ্ধতি। এটি ব্যবহারকারীদের সহজেই অথেন্টিকেশন প্রদান করে এবং ওয়েব অ্যাপ্লিকেশনে উচ্চ সুরক্ষা নিশ্চিত করে।
Read more